It can be useful to be able to identify the code produced by different compilers to, among other uses, identify non-licensed uses of the compilers and to track errors. Accordingly, compiler manufacturers require a method of including a serial number or other information in code produced by a compiler. Additionally, a method of analyzing a copy of the compiled code to determine the serial number or other information is also required.
A private watermark, which is data hidden via steganography, is one method for embedding data in the outputs of licensed programs. However, traditional steganography requires the presence of “low order” bits in the data stream. The low order bits can be changed without the data changing so much that a human can notice the difference. The changed bits, detected when the modified data is compared to the original, can hold the steganographic data. Since traditional stenography changes non-significant low-order bits, steganography is normally applied to digital pictures and sounds which contain non-significant low-order bits.
Steganography in computer code can't be done with the normal methods because computer code does not contain low-order bits. Every bit in the code is important, and changing even one bit can prevent the code from operating correctly.
Accordingly, improved techniques for inserting identifying watermarks in compiled programs are needed.